package com.modular.iot.bo;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Opt;
import lombok.Data;
import lombok.NoArgsConstructor;
import ntd.util.modular.things.entity.Device;
import ntd.util.modular.things.entity.Service;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * 物模型对象
 */
@Data
@NoArgsConstructor
public class IotModelBo {

    /** 设备编码 */
    private String code;

    /** 设备名称 */
    private String name;

    /** 设备状态-0:离线,1:在线 */
    private int status;

    /** 最新通讯ip */
    private String lastConnIp;

    /** 最后通讯时间 */
    private LocalDateTime lastConnTime;

    /** 设备数据 */
    private IotData iotData;

    /** iot 配置列表 */
    private List<IotAttribute> attributes = new ArrayList<>();

    /** iot 服务列表 */
    private List<Service> services = new ArrayList<>();

    public IotModelBo(IotData iotData) {
        this.iotData = iotData;
    }

    /**
     * 添加配置
     * @param iotAttribute
     */
    public void addAttribute(IotAttribute iotAttribute) {
        Opt.ofNullable(iotAttribute).ifPresent(attributes::add);
    }

    /**
     * 设备转换为物模型
     * @param device
     * @return
     */
    public static IotModelBo transform(Device device) {
        IotModelBo iotModelBo = new IotModelBo();
        BeanUtil.copyProperties(device, iotModelBo);
        return iotModelBo;
    }
}
